package com.zofer.study.funinterface;

public class FuntionInterfaceTest03 {

    // 1).未延迟：效率低：
//    public static void main(String[] args) {
//        String msg1 = "日期：2018-08-27";
//        String msg2 = "异常：NullPointerException";
//        String msg3 = "位置：Demo.java 13行";
//
//        printLog(2, msg1 + msg2 + msg3);
//    }

    public static void printLog(int level, String msg) {
        if (level == 1) {
            System.out.println("写入日志：");
            System.out.println(msg);
        }else{
            System.out.println("不写日志：");
            System.out.println(msg);
        }
    }


    // 2).延迟：效率高：
    //不加 @FunctionalInterface，有且只有一个抽象方法的接口 也是函数式接口
    interface MessageBuilder{
        public String buildMsg();
    }

    public static void main(String[] args) {
        String msg1 = "日期：2018-08-27";
        String msg2 = "异常：NullPointerException";
        String msg3 = "位置：Demo.java 13行";
        //使用匿名内部子类对象
        printLog(2, new MessageBuilder() {
            @Override
            public String buildMsg() {
                System.out.println("开始拼接信息....");
                return msg1 + msg2 + msg3;
            }
        });
        //使用Lambda代替
        printLog(1,()-> msg1 + msg2 + msg3);
    }

    public static void printLog(int level, MessageBuilder mb) {
        if (level == 1) {
            System.out.println("写入日志：");
            System.out.println(mb.buildMsg());//调用方法，拼接字符串
        }else{
            System.out.println("不写日志：");
            //不调方法，不拼接字符串
        }
    }

}
